﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using QuanserClient;

namespace TankController.Dominio
{
    class ControladorDefaultMalhaAberta : ControladorMalhaAberta
    {
        public ControladorDefaultMalhaAberta()
        {
            // TODO: Complete member initialization
        }

        public ControladorDefaultMalhaAberta(IPlanta planta, int periodo)
            : this()
        {
            this.planta = planta;
            this.periodo = periodo;
        }

        protected override void Controlar()
        {
            double valorEntrada = entrada.GetValorAmplitude(tempoAtual);
            double valorProcesso = planta.Ler() * (planta as IPlanta).FatorConversao;
            double valorSaida = valorEntrada;
            double valorSaidaCorrigido = ManterNivelSeguranca(valorProcesso, valorSaida);

            planta.Escrever(valorSaidaCorrigido);

            entrada.GerarPontoSinal(tempoAtual, valorEntrada, sinalEntrada);
            entrada.GerarPontoSinal(tempoAtual, valorSaidaCorrigido, sinalSaida);
            //sinalSaida.AdicionarPonto(tempoAtual, valorSaidaCorrigido);
            sinalProcessoSensor1.AdicionarPonto(tempoAtual, valorProcesso);
        }

        public override IList<ISinal> GetSinaisAltura()
        {
            IList<ISinal> sinalList = new List<ISinal>();

            sinalList.Add(sinalProcessoSensor1);

            return sinalList;
        }

        public override IList<ISinal> GetSinaisTensao()
        {
            IList<ISinal> sinalList = new List<ISinal>();

            sinalList.Add(sinalEntrada);
            sinalList.Add(sinalSaida);

            return sinalList;
        }

        protected override void Reiniciar()
        {

        }

        public override String Descricao
        {
            get { return "Malha Aberta Padrão"; }
        }
    }
}
